// 定义user的路由中间件
const express = require('express');

// 导入sql执行方法
const execSql = require('../util/sql');

let userRouter = express.Router();

// 1.0 用户注册
userRouter.post('/register', (req, res) => {
    // 操作数据库
    let { userName, userPwd } = req.body;

    // 2.0 增加一个判断userName 变量存储的真实值是否在数据库中存在，如果存在了则提示用户改用户被注册了
    let selectSql = ` select * from user where username ='${userName}'`;
    execSql(selectSql, (selerr, sel_restuls) => {
        // 判断sql语句执行报错，则返回500错误
        if (selerr) {
            res.json({ code: 500, msg: selerr.message });
            return;
        }

        // 判断sel_restuls 数组长度如果大于0则表示当前用户在数据库中存在了,提示用户201，注册失败
        // console.log(sel_restuls);
        if (sel_restuls.length > 0) {
            res.json({ code: 201, msg: '当前用户已经被注册，请换一个用户名' })
            return;
        }


        // 如果用户没有被注册则继续执行插入数据操作
        let sql = `insert into user(username,password) values('${userName}','${userPwd}')`;
        execSql(sql, (err, result) => {
            if (err) {
                res.json({ code: 500, msg: err.message });
                return;
            }

            /*
            insert 语句
            result 是一个对象
                result.insertId 是新增数据的id
                result.affectedRows 表示受影响的行数 ，如果这个属性值为0 则表示没有插入数据
    
            */
            if (result.affectedRows == 0) {
                res.json({ code: 201, msg: '注册失败' });
                return;
            }

            res.json({ code: 200, msg: '注册成功' });
        })

    })

})

// 2.0 用户登录
const jwt = require('jsonwebtoken');
userRouter.post('/login', (req, res) => {
    // 结构参数
    let { userName, userPwd } = req.body;

    // 参数验证
    if (!userName || !userPwd) {
        res.json({ code: 201, msg: '用户名或者密码不合法' });
        return;
    }

    // 响应
    let sql = ` select * from user where username = '${userName}' and password = '${userPwd}' `;
    execSql(sql, (err, result) => {
        if (err) {
            res.json({ code: 500, msg: err.message });
            return;
        }

        // 正常响应
        // 用户名或者密码不正确
        if (result.length <= 0) {
            res.json({ code: 201, msg: '用户名或者密码错误' });
            // return;
        } else {
            // 用户名和密码正确
            // token的生成方式使用的是jsonwebtoken第三方包
            // 使用步骤：1 .  npm i jsonwebtoken
            //   const jwt = require('jsonwebtoken')
            /* 生成token，直接调用sign，有三个参数
            第一个参数表示要将什么数据保存到token中，我们通常存储的是登录成功的用户id（或者用户名）
            // 
            jwt.sign({
                       id:?,
                       name:?
                    },
                     'jwt64',    // 这个参数表示token生成的加密密码，可以有开发者随意定制
                { expiresIn: 60 * 60 });  // 表示过期时间，单位为秒， 60 * 60 表示1小时候过期
                                */
            let token = jwt.sign({ id: result[0].id }, 'jwt64', { expiresIn: 60 * 60 });

            res.json({ code: 200, msg: '登陆成功', token: token });
        }
    })

})

module.exports = userRouter;